<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>

<script>
// Set - 数学上的「集合」
  // 没有重复特性的元素，放到一起；  即 集合中，任何一个元素，只会出现一次。

const s = new Set([1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 'a' , 'a', 'b', {name: 'ming'}, {name: 'ming'}]);
s.add('xxx')
// console.log(...s, s.clear());
// console.log(s);

// Set 去重的逻辑：根据 内存地址进行 去重

// --------------
// Map -> 映射；  dict
  // 字典类型的数据、对象、Map 本质都指的是 一类数据类型： {key -> value, key -> value}

/* map 第一种 声明方式
  const m = new Map();
  m.set('name', 'yo');
  m.set('age', 'xxx');

  console.log(...m);
*/

/* map 第二种 声明方式
  const m = new Map([
    ['name', '111'], // 通过 二维数组 的形式，表现 key -> value
    ['age', 222]
  ]);
  console.log('m1', m);
*/

// 面试问题： Map 提供了什么 object 做不到的事情？
  // 对象的 key 必须是 字符串
  // Map 的 key 可以是 任意类型的变量
const add = (x, y) => x + y;
const obj = {name: 'xx'};
const o = {
  ['a' + 1]: 123,
  [add]: 'add',
  [obj]: 'obj'
};
// console.log(o);

const m = new Map();
m.set(add, 'add');
m.set(obj, 'vakue 0 iobj');
</script>